"""
分数到小数

给定两个整数，分别表示分数的分子 numerator 和分母 denominator，以 字符串形式返回小数 。
如果小数部分为循环小数，则将循环的部分括在括号内。
如果存在多个答案，只需返回 任意一个 。
对于所有给定的输入，保证 答案字符串的长度小于 104 。
 
示例 1：
输入：numerator = 1, denominator = 2
输出："0.5"
示例 2：
输入：numerator = 2, denominator = 1
输出："2"
示例 3：
输入：numerator = 4, denominator = 333
输出："0.(012)"

"""

def fraction_to_decimal(numerator, denominator):
    """
    :type numerator: int
    :type denominator: int
    :rtype: str
    """
    if denominator == 0 or numerator == 0:
        return "0"
    result = []
    if (numerator < 0) ^ (denominator < 0) :
        result.append("-")

    numerator = abs(numerator)
    denominator = abs(denominator)

    interger = numerator // denominator
    reminder = numerator % denominator

    result.append(str(interger))
    if reminder == 0:
        return ''.join(result)
    
    result.append(".")
    reminder_dict = {}
    while reminder !=0 and reminder not in reminder_dict:
        reminder_dict[reminder] = len(result)
        reminder *= 10
        tmp_interger = reminder // denominator
        result.append(str(tmp_interger))
        reminder = reminder % denominator
    
    if reminder in reminder_dict:
        start = reminder_dict[reminder]
        result.insert(start, "(")
        result.append(")")

    return ''.join(result)

if __name__ == '__main__':
    numerator = 0
    denominator = 8
    print(fraction_to_decimal(numerator, denominator))